global.sg = world.querySelector('#邀请新人');
sg.enableInteract = true; // 允许进行互动
sg.interactRadius = 5;   // 实体的互动范围
sg.interactHint = '分享给好友赢奖励'; // 互动提示框显示实体的名称
sg.interactColor = new GameRGBColor(1, 0, 1);  // 互动提示的文字颜色

sg.onInteract(async ({ entity }) => {
    const da = await entity.player.dialog({
        type: GameDialogType.SELECT,
        content: "分享好友领奖励（奖励仅限分享到外部平台）\n你已经邀请了0个好友，0个未领取礼包",
        title: `分享有礼`,
        options: ['分享', '领取奖励'],
    })
    if (da) {
        if (da.index == 0) {
            entity.player.share('快来《超时空对决：新生》抵抗路西法，一起守卫我们共同的家园！')
        }
    }
})

world.onPlayerJoin(({ entity }) => {
    // 获取玩家进入地图时所用的URL链接地址
    const url = entity.player.url;
    // 使用URLSearchParams解析URL中的参数
    const searchParams = new URLSearchParams(url.searchParams);

    // 获取名为type的参数值
    const formUserid = searchParams.get('formUserId');
    if (formUserid) {
        entity.coin += 600
    }
})



let ADMIN = ['飞跃的流星']//可以查看意见的玩家名
let WRITE_LENGTH = 60//可以输入字数

void async function () {
    globalThis.Mailbox = storage.getDataStorage('mailBox')//创建云存档
    if (!await Mailbox.get('record')) {//是否有创建云表格
        await Mailbox.set('record', [])//没有就创建
    }
    globalThis.record = await Mailbox.get('record')//获取
    globalThis.writeData = record.value//这里用了一个本办法[]具体原因看结尾
    globalThis.players = []
}()

let NPC = world.querySelector('#邮箱')//互动的模型
NPC.enableInteract = 1//可以互动
NPC.interactRadius = 5//互动空间为5
NPC.interactHint = '意见机器人'//互动名称为"邮箱"
NPC.onInteract(async ({ entity: e }) => {//开始互动
    if (ADMIN.includes(e.player.name)) {
        let sel = await e.dlgSel(null, '意见机器人', ['写意见', '查看意见', '清除所有意见'])
        if (sel) {
            let v = sel.value
            if (v === '写意见') {
                await write(e, v)
            } else if (v === '查看意见') {
                if (writeData.length <= 0) return await e.dlgMsg(v, '暂无意见')
                let options = Object.keys(record.value).map(i => { return record.value[i].name })//用map方法获取表格里面的东西
                let sel0 = await e.dlgSel(v, '一共' + options.length + '跳意见', options)
                if (sel0) {
                    let title = writeData[sel0.index]//获取
                    let sel1 = await e.dlgSel(v, `玩家Id: ${title.userId}\n状态: ${world.querySelectorAll('player').find(i => i.player.userId === title.userId) ? '在线' : '离线'}\n` + title.text, ['删除'])//显示内容
                    if (sel1) {
                        writeData.remove(title)//删除
                        await Mailbox.update('record', () => { return writeData })//改变云表格量为表格
                        await e.dlgMsg(v, '删除成功')
                    }
                }
            } else if (v === '清除所有意见') {
                if (record.value.length <= 0) return await e.dlgMsg(v, '暂无意见')
                let sel0 = await e.dlgSel(v, '确定吗', ['确定', '再想想'])
                if (sel0 && sel0.value === '确定') {
                    let a = record.value
                    for (let x = 0; x < a.length; x++) {
                        a.remove(a[x])
                    }
                    await Mailbox.update('record', () => { return a })//这里不是作者不知道直接 执行空表格 而是执行后[]他还是显示 需要世界刷新
                    await e.dlgMsg(v, '清除成功')
                }
            }
        }
    } else await write(e, '写意见')
})
globalThis.write = async function (e, v) {
    if (players.includes(e.player.userId)) return await e.dlgMsg(v, '你今天上传过了\n请明日再来')
    let sel0 = await e.dlgInput(v, '请输入你的意见\n字数小于' + WRITE_LENGTH + '字')
    if (sel0) {
        if (sel0.length > WRITE_LENGTH) return await e.dlgMsg(v, '字数过多')
        try {
            players.push(e.player.userId)
            writeData.unshift({ userId: e.player.userId, name: e.player.name, text: sel0 })//向表格添加参数
            await Mailbox.update('record', (preData) => { return writeData })//改变云表格量为表格
            await e.dlgMsg(v, '上传成功')
        } catch (qwq) {
            console.log(qwq)
            await e.dlgMsg(v, '上传失败')//可能会因服务器原因 卡逝
        }
    }
}

Array.prototype.remove = function (ele) {//这里是定义的一些东西[] 代码师应 该都看的懂
    if (!this.includes(ele)) return null;
    else return this.splice(this.indexOf(ele), 1)
}
GameEntity.prototype.dlgMsg = async function (title, content, hasArrow) {
    let sel = await this.player.dialog({
        type: 'text',
        title,
        content,
        hasArrow,
    })
    return sel
}
GameEntity.prototype.dlgInput = async function (title, content) {
    let sel = await this.player.dialog({
        type: 'input',
        title,
        content,
    })
    return sel
}
GameEntity.prototype.dlgSel = async function (title, content, options) {
    let sel = await this.player.dialog({
        type: 'select',
        title,
        content,
        options,
    })
    return sel || ''
}

const boss = world.querySelector('#深空异骸');
boss.enableInteract = true; // 允许进行互动
boss.interactRadius = 3;   // 实体的互动范围
boss.interactHint = '外星飞船的残骸' // 互动提示框显示实体的名称

// 玩家与实体进行交互时触发
boss.onInteract(async ({ entity }) => {
    const result = await entity.player.dialog({
        type: GameDialogType.TEXT,   // 对话框的类型，TEXT是文本框。            // 相机镜头对准NPC
        title: '飞船残骸',
        content: `一个没有能量的外星飞船残骸，里面有废弃的激光发射器和飞镖发射舱，貌似是实验的失败品...`,
    });
});



